package in.lib.adapter;
import in.lib.Constants;
import in.lib.adapter.base.MessageAdapter;
import in.lib.holder.CenterPrivateMessageHolder;
import in.lib.holder.PrivateMessageHolder;
import in.lib.manager.UserManager;
import in.model.PrivateMessage;
import in.obj.entity.MentionEntity;
import in.rob.client.R;
import in.rob.client.dialog.DeleteMessageDialog;
import in.rob.client.dialog.ReplyMessageDialog;
import java.util.List;
import lombok.Getter;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
public class PrivateMessageAdapter extends MessageAdapter
{
@Getter private final int postLayoutResource, mentionLayoutResource, centerLayoutResource;
public PrivateMessageAdapter(Context context, List<PrivateMessage> items, PrivateMessage centralMessage)
{
this(context, items, centralMessage, Order.DESC);
}
public PrivateMessageAdapter(Context context, List<PrivateMessage> items)
{
this(context, items, null, Order.DESC);
}
public PrivateMessageAdapter(Context context, List<PrivateMessage> items, PrivateMessage centralMessage, Order order)
{
super(context, items);
this.postLayoutResource = R.layout.message_list_item;
this.mentionLayoutResource = R.layout.message_list_item_mention;
this.centerLayoutResource = R.layout.message_list_item_center;
}
@Override public View getView(int position, View convertView, ViewGroup parent)
{
int viewType = getItemViewType(position);
PrivateMessage message = (PrivateMessage)getItem(position);
PrivateMessageHolder currentHolder;
if (convertView == null)
{
if (viewType == TYPE_STANDARD)
{
convertView = getLayoutInflater().inflate(this.postLayoutResource, parent, false);
}
else if (viewType == TYPE_MENTION)
{
convertView = getLayoutInflater().inflate(this.mentionLayoutResource, parent, false);
}
else if (viewType == TYPE_CENTER)
{
convertView = getLayoutInflater().inflate(this.centerLayoutResource, parent, false);
}
if (viewType == TYPE_CENTER)
{
currentHolder = new CenterPrivateMessageHolder(convertView);
((CenterPrivateMessageHolder)currentHolder).userContainer.setOnClickListener(this);
}
else
{
currentHolder = new PrivateMessageHolder(convertView);
}
convertView.setTag(R.id.TAG_VIEW_HOLDER, currentHolder);
// set the button listeners for options
currentHolder.replyButton.setOnClickListener(this);
currentHolder.replyAllButton.setOnClickListener(this);
currentHolder.shareButton.setOnClickListener(this);
currentHolder.deleteButton.setOnClickListener(this);
currentHolder.moreButton.setOnClickListener(this);
currentHolder.avatar.setOnClickListener(this);
currentHolder.avatar.setOnLongClickListener(this);
}
else
{
currentHolder = (PrivateMessageHolder)convertView.getTag(R.id.TAG_VIEW_HOLDER);
}
// set defaults
currentHolder.replyAllButton.setVisibility(View.VISIBLE);
currentHolder.optionsContainer.setVisibility(View.GONE);
if (viewType == TYPE_STANDARD || viewType == TYPE_MENTION)
{
currentHolder.populate(message, this);
currentHolder.media.setOnClickListener(this);
currentHolder.media.setOnLongClickListener(this);
currentHolder.media.setTag(position);
}
else if (viewType == TYPE_CENTER)
{
((CenterPrivateMessageHolder)currentHolder).populate(message, this);
currentHolder.locationImage.setTag(position);
currentHolder.locationImage.setOnClickListener(this);
currentHolder.text.setTag(R.id.TAG_ENTITY, message.getAnnotations());
currentHolder.media.setOnClickListener(this);
currentHolder.media.setOnLongClickListener(this);
currentHolder.media.setTag(position);
((CenterPrivateMessageHolder)currentHolder).userContainer.setTag(position);
}
currentHolder.avatar.setTag(position);
currentHolder.deleteButton.setTag(position);
currentHolder.shareButton.setTag(position);
currentHolder.moreButton.setTag(position);
currentHolder.replyButton.setTag(position);
currentHolder.replyAllButton.setTag(position);
super.getView(position, convertView, parent);
return convertView;
}
@Override public void onClick(View v)
{
if (v.getTag() == null) return;
final PrivateMessage post = (PrivateMessage)getItem((Integer)v.getTag());
if (v.getId() == R.id.delete)
{
Intent intent = new Intent(getContext(), DeleteMessageDialog.class);
intent.putExtra(Constants.EXTRA_MESSAGE, post);
getContext().startActivity(intent);
return;
}
else if (v.getId() == R.id.reply)
{
Intent inReply = new Intent(getContext(), ReplyMessageDialog.class);
inReply.putExtra(Constants.EXTRA_CHANNEL_ID, post.getChannelId());
inReply.putExtra(Constants.EXTRA_REPLY_TO, post);
getContext().startActivity(inReply);
return;
}
else if (v.getId() == R.id.reply_all)
{
// get post participants
String myUserId = UserManager.getUserId();
String participants = "@" + post.getPoster().getMentionName() + " ";
for (MentionEntity mention : post.getMentions())
{
if (!participants.contains(mention.getName()) && !mention.getName().equals(UserManager.getUser().getMentionName()))
{
participants += "@" + mention.getName() + " ";
}
}
Intent in = new Intent(getContext(), ReplyMessageDialog.class);
in.putExtra(Constants.EXTRA_CHANNEL_ID, post.getChannelId());
in.putExtra(Constants.EXTRA_REPLY_TO, post);
in.putExtra(Constants.EXTRA_REPLY_TO_EXTRA, participants);
getContext().startActivity(in);
return;
}
super.onClick(v);
}
}